package com.itheima.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @ClassName: Test5
 * @Description:做一些业务逻辑
 * @Author liulihui
 * @Date: 2021/7/25 20:40
 * @URL：
 * @Version 1.0
 */
public class Test5 {
    public static void main(String[] args) {
        Car qq=new QQ();
        Car proxy =(Car) Proxy.newProxyInstance(
                Test5.class.getClassLoader(),
                new Class[]{Car.class},
                new MyInvocationHandler(qq));
        //返回对象 一定是  Car.class的子类!!!
        proxy.start();
        proxy.stop();
        proxy.didi();

    }
    //他才是真正的干活的对象
    static class MyInvocationHandler implements InvocationHandler{

        //原本对象的意思 ,想让原来对象在现在这个类中用,就必须引进当前类,方法就是把原来对象搞成当前类的一个属性.
        private  Car ori;
        public MyInvocationHandler(Car ori){
            this.ori=ori;
        }
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("______华丽的分割线__________");
            Object result;

            //使用原本那辆车的 方法!!!
            //
            //method对象.invoke(调用这个方法的对象,参数...)=============对象.方法(参数....)
            result = method.invoke(ori, args);

            return result;
        }
    }

}